package easy;

public class MergeSortedArray {
    //题目测试用例似乎有问题
    public void merge0(int[] nums1, int m, int[] nums2, int n) {
        int pos = m+n-1;
        int posNum1 = m-1;
        int posNum2 = n-1;
        for(int i=pos;i>=0;i--){
            if(posNum1>=0 && posNum2>=0) {
                if (nums1[posNum1] >= nums2[posNum2]) {
                    nums1[pos] = nums1[posNum1];
                    posNum1--;
                } else {
                    nums1[pos] = nums2[posNum2];
                    posNum2--;
                }
            }else{
                if(posNum1<0){
                    nums1[pos] = nums2[posNum2];
                    posNum2--;
                }else{
                    nums1[pos] = nums1[posNum1];
                    posNum1--;
                }
            }
        }
    }
    //while解释：如果数组A先消耗完则将数组B逐个放入，如果数组B先消耗完则数组A不需要移动因为已排序
    public void merge(int[] A, int m, int[] B, int n) {
        int i=m-1, j=n-1, k=m+n-1;
        while (i>-1 && j>-1) A[k--]= (A[i]>B[j]) ? A[i--] : B[j--];
        while (j>-1)         A[k--]=B[j--];
    }
}
